package main

import "fmt"

// 创建一个上面 Car 和 Engine 可运行的例子，并且给 Car 类型一个 wheelCount 字段和一个 numberOfWheels() 方法。
// 创建一个 Mercedes 类型，它内嵌 Car，并新建 Mercedes 的一个实例，然后调用它的方法。
// 然后仅在 Mercedes 类型上创建方法 sayHiToMerkel() 并调用它。

type Engine interface {
	start()
	stop()
}

type Car struct {
	Engine
	wheelCount int
}

type Mercedes struct {
	Car
	numOfHi int
}

func (c *Car) numberOfWheels() int {
	return c.wheelCount
}

func (c *Car) start() {
	fmt.Println("Engine Start!")
}

func (c *Car) stop() {
	fmt.Println("Engine Stop!")
}

func (m *Mercedes) sayHiToMerkel() {
	m.start()
	fmt.Println("hi Merkel, How are you?")
	m.stop()
	m.numOfHi += 1
}

func main() {
	m := &Mercedes{Car{nil, 4}, 0}
	m.sayHiToMerkel()
	fmt.Println("Mercedes: ", m)
}
